package com.ranjiaqi.builder;

/**
 * @ClassName TestString
 * @Description TODO
 * @Author hp
 * @Date 2021/6/21 18:32
 * @Version 1.0
 **/
public class TestString {
    public static void main(String[] args) {
        String str = "abc";
        StringArgument(str);
        /**
         * String类型是不可变的，底层是一个final修饰的char数组
         * 当将字符串作为参数传入方法时传递的是指向堆空间中char数组的地址值
         * 当在方法里改变字符串变量的内容时，由于char数组的地址被锁定，会重新开辟一个数组
         * 然后指向新的数组等到方法结束出栈时，str的地址值失效，在主方法中依旧是曾经的地址值
         */
        System.out.println("str = " + str);
    }

    private static void StringArgument(String str) {
        str = "hello";
    }
}
